package com.example.demo.common;

import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;

import javax.servlet.http.HttpServletResponse;

import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.context.annotation.ApplicationScope;

/**
 * 
 * <p>
 * 功能描述：工具类
 * </p>
 * 
 * @author lixh
 * @date 2019年1月30日 下午3:21:20
 * @version 1.0
 */

public class CommonUtil {
	/**
	 * 判断字符串是否为空 为空:true 不为空:false;
	 *
	 * @param targetvalue
	 *            需要判断的值
	 * @return
	 */
	public static boolean isEmpty(String targetvalue) {
		if (StringUtils.isEmpty(targetvalue)) {
			return true;
		}
		return StringUtils.isEmpty(targetvalue.trim());
	}

	/**
	 * 判断字符串是否不为空 不为空:true 为空:false;
	 *
	 * @param targetvalue
	 *            需要判断的值
	 * @return
	 */
	public static boolean isNotEmpty(String targetvalue) {
		return !isEmpty(targetvalue);
	}

	/**
	 * 
	 * 方法描述: 日期格式化 时间戳
	 * 
	 * @param seconds
	 * @param format
	 * @return
	 * @author lixh
	 */
	public static String timeStamp2Date(String seconds, String format) {
		if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {
			return "";
		}
		if (format == null || format.isEmpty()) {
			format = "yyyy-MM-dd";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(seconds);
	}

	/**
	 * 
	 * 方法描述: status 数字状态转化为汉字
	 * 
	 * @return
	 * @author lixh
	 */
	public static String ifStatus(String status) {
		if (StringUtils.isEmpty(status)) {
			return "";
		}
		if (status.equals("1")) {
			return "有效";
		}
		if (status.equals("0")) {
			return "无效";
		}
		return "";
	}

	/**
	 * 
	 * 方法描述: 法律条款类型
	 * 
	 * @return
	 * @author lixh
	 */

	public static String LawsType(String type) {
		if (StringUtils.isEmpty(type)) {
			return "";
		}
		if (type.equals("1")) {
			return "全文";
		}
		if (type.equals("2")) {
			return "法律条款";
		}
		return "";
	}

	/**
	 * 将日期格式的字符串转换为java.util.Date类型的时间(不带时分秒)
	 * 
	 * @param datestr
	 * @return
	 * @throws ParseException
	 */
	public static Date getStringToDate(String formate, String datestr) {
		if (StringUtils.isEmpty(datestr)) {
			return null;
		}
		try {
			if (StringUtils.isEmpty(formate)) {
				formate = "yyyy-MM-dd";
			}
			SimpleDateFormat sdf = new SimpleDateFormat(formate);
			return sdf.parse(datestr);
		} catch (Exception e) {
			throw new RuntimeException("字符串转换成日期格式发生错误,请检查字符串格式是否正确", e);
		}
	}

	public static Date formatDate(String datdString) throws ParseException {
		datdString = datdString.replace("GMT", "").replaceAll("\\(.*\\)", "");
		// 将字符串转化为date类型，格式2016-10-12
		SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy hh:mm:ss z", Locale.ENGLISH);
		Date dateTrans = format.parse(datdString);
		return dateTrans;
	}

	/**
	 * 
	 * 方法描述 : 判断字符串是否包含数字 ：用ascii码
	 * 
	 * @param str
	 * @return
	 * @author lixh
	 */
	public static boolean isNumeric(String str) {
		for (int i = str.length(); --i >= 0;) {
			int chr = str.charAt(i);
			if (chr < 48 || chr > 57)
				return false;
		}
		return true;
	}

	/**
	 * 
	 * 方法描述: 生成主键
	 * 
	 * @return
	 * @author lixh
	 */

	public static String getUUID() {
		return UUID.randomUUID().toString().replace("-", "");
	}

	/**
	 * 
	 * 方法描述:公共文件下载器
	 * 
	 * @return
	 * @author lixh
	 */
	public ResponseEntity<FileSystemResource> downloadFile(HttpServletResponse response, Long id, String fileId) {
		String dowUrl = "";
		String fileName = null;
		InputStream inputStream = null;
		OutputStream oStream = null;
		try {

			fileName = new String(fileName.getBytes("Gb2312"), "ISO-8859-1");
			File file = new File(dowUrl + fileName);
			HttpHeaders headers = new HttpHeaders();
			headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
			headers.add("Content-Disposition", "attachment; filename=" + fileName);
			headers.add("Pragma", "no-cache");
			headers.add("Expires", "0");
			headers.add("Last-Modified", new Date().toString());
			headers.add("ETag", String.valueOf(System.currentTimeMillis()));
			return ResponseEntity.ok().headers(headers).contentLength(file.length())
					.contentType(MediaType.parseMediaType("application/octet-stream"))
					.body(new FileSystemResource(file));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return org.springframework.http.ResponseEntity.status(Integer.parseInt("500")).build();
	}

	/**
	 * 
	 * 方法描述: 生成订单编号
	 * 
	 * @return
	 * @author lixh
	 */

	public static String getOrderIdByUUId() {
		int machineId = 1;// 最大支持1-9个集群机器部署
		int hashCodeV = UUID.randomUUID().toString().hashCode();
		if (hashCodeV < 0) {// 有可能是负数
			hashCodeV = -hashCodeV;
		}
		// 0 代表前面补充0
		// 4 代表长度为4
		// d 代表参数为正数型
		return machineId + String.format("%015d", hashCodeV);
	}
}
